// 认证模块接口：登录、注册、第三方OAuth跳转
import { http } from './client';
import { API_BASE_URL, OAUTH_REDIRECT_PATH } from '../constants/config';

// 普通登录（后端要求字段：username, password）
export async function login({ username, password }) {
  return http.post('/auth/login', { body: { username, password } });
}

// 注册（后端支持字段：username, phone, password, confirmPassword；如需兼容email，可一并传入）
export async function register({ username, phone, password, confirmPassword, email }) {
  const body = { username, password, confirmPassword };
  if (phone) body.phone = phone;
  if (email) body.email = email;
  return http.post('/auth/register', { body });
}

// 获取第三方登录的跳转URL（如后端需要动态生成state等参数）
export async function getOAuthUrl(provider) {
  // 后端文档：GET /auth/oauth2/login/{provider} 返回 data 为跳转地址
  const resp = await http.get(`/auth/oauth2/login/${provider}`);
  const url = typeof resp === 'string' ? resp : resp?.data;
  return { url };
}

// 触发第三方登录跳转
export async function oauthSignIn(provider) {
  const { url } = await getOAuthUrl(provider);
  window.location.href = url;
}

// 处理第三方登录回调（前端在 /oauth/callback/:provider 读取 code 并交给后端）
export async function oauthCallback(provider, code) {
  return http.get(`/auth/oauth2/callback/${provider}`, { params: { code } });
}

// 退出登录（后端清理会话或撤销令牌）
export async function logout() {
  // 按文档约定调用 /auth/logout，通常为 POST
  return http.post('/auth/logout');
}

// 获取当前登录用户（基于后端设置的 HttpOnly Cookie 会话）
// 约定返回：{ code, message, data: { user }, timestamp } 或直接 { user }
export async function getCurrentUser() {
  const resp = await http.get('/auth/me');
  // 兼容不同返回结构
  const data = resp?.data || resp;
  return { user: data?.user || data };
}
